'''
@author: Nati
'''
from clasesPrincipales.Instruccion import Instruccion
from clasesPrincipales.PCB import PCB
from clasesPrincipales.Programa import Programa
from mockito import *
from planificacion.FCFS import FCFS
from planificacion.Scheduler import Scheduler
import unittest


class TestSchedulerWithFCFS (unittest.TestCase):
    def setUp (self):
        #Compruebo que los metodos de Scheduler andan para cada una de las politicas.
        myManager = mock()
        self.sch = Scheduler (FCFS (), myManager)
        
    #El setUp() no puede redefinir de 0 los parametros creados; por tal motivo me aseguro lo haga. Asi no ocurren errores inesperados
    def tearDown(self): 
        self.sch = None
        
    def testCurrentTask(self):
        self.assertTrue(self.sch.currentTask()== None)
        self.tearDown()
        
    def testNextTask (self):
        #le agrego una tarea para comprobar que si tiene proximo
        process = Programa ('Python',[Instruccion(Instruccion.CPU, 2)])
        self.sch.addTask (PCB (process, 0))
        #assert
        self.assertFalse (self.sch.nextTask()==None)
        self.tearDown()       

    def testAddTask(self):
        # Arrange
        process = Programa ('Python',[Instruccion(Instruccion.CPU, 2)])
        # Act
        self.sch.addTask (PCB (process, 0))
        # Assert
        self.assertTrue(self.sch.getReady().qsize()==1)
        self.tearDown()
        
    def testKillTask(self):
        self.assertTrue(self.sch.killTask()== None)
        self.tearDown()
        
    def testHasNext(self):
        self.assertFalse (self.sch.hasNext())
        self.tearDown()

